//
//  HMMainViewController.swift
//  01-SinaWeibo
//
//  Created by 周英培 on 16/5/19.
//  Copyright © 2016年 周英培. All rights reserved.
//

import UIKit
/*
 1.怎么设置显示出导航条  设置导航控制器，内嵌入一个导航控制器，
 2.标签控制器的标签是模型对象
 3.private 表示 私有的意思 只是相对于当前文件 是私有的
 4设置标签的时候，既要设置文字，也要同时设置图片，否则会有错误
 5.标签文字位置太靠下的情况下的设置文字的位置
   vc.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, -10)
 6.设置标签的图片的位置
   vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
 7. 设置选中时的标签图片的样式
    vc.tabBarItem.selectedImage = UIImage(named: imageName + "_selected")
 8.设置选中状态的标签图片的样式，并设置渲染方式
    vc.tabBarItem.selectedImage = UIImage(named: imageName + "_selected")?.imageWithRenderingMode(.AlwaysOriginal)
 9.设置标签文字的选中颜色 NSForegroundColorAttributeName:前景色
   vc.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.redColor()], forState: .Selected)
 10.统一设置标签文字颜色
    tabBar.tintColor = UIColor.redColor()
 11.分类中不能使用构造函数，要使用便利的构造函数，并且不能调用super，用self
 12.让某个按钮处于最上面
    bringSubviewToFront(plusBtn)

 */
class HMMainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //MARK:设置导航控制条
        //MARK:添加控制器
        addViewcontrollers()
        
        //MARK:自定义tabbar
        let mainTabbar = HMMainTabBar()
        
        //只读，不能set值，所以这种赋值不行，所以用KVC赋值
//        self.tabBar = mainTabbar
        
        //利用KVC赋值
        setValue(mainTabbar, forKey: "tabBar")
        
        //给➕按钮添加点击事件
        mainTabbar.plusBtn.addTarget(self, action: #selector(plusBtnClick), forControlEvents: .TouchUpInside)
        
    }
    
    //为了让外界不能够访问按钮的监听方法 需要添加private 私有
    //一旦添加private 这个时候这个 就不具备动态派发的特性
    //需要添加 @objc 告诉系统这个方法 是基于OC消息动态派发的
    @objc private func plusBtnClick() {
    
//        print("被电击")
        //跳转界面 进入选择视图
        let composeView = HMComposeView()
        composeView.show(targetVC: self)
        
//        let window = UIApplication.sharedApplication().keyWindow
//        
//        window?.addSubview(composeView)
        
        
    
    }
    
    //添加多个控制器
    private func addViewcontrollers() {
    
        addViewContrller(HMHomeTableViewController(), title: "首页", imageName: "tabbar_home",index: 0)
        
        addViewContrller(HMMessageTableViewController(), title: "消息", imageName: "tabbar_message_center",index: 1)
        
        addViewContrller(HMDiscoverTableViewController(), title: "发现", imageName: "tabbar_discover",index: 2)

        addViewContrller(HMProfileTableViewController(), title: "我的", imageName: "tabbar_profile",index: 3)
    
    }

    //添加多个控制器的方法传入参数封装起来
    private func addViewContrller(vc:UIViewController,title:String,imageName:String,index:Int) {
    
       /*
        //这只是添加的一个，需要添加多个
    let home = HMHomeTableViewController()
        
        //设置相对应的标题
        home.navigationItem.title = "首页"
        
        //设置标签
        home.tabBarItem.title = "首页"
        home.tabBarItem.image = UIImage(named: "tabbar_home")
        */
        
//        //设置相对应的标题
//        vc.navigationItem.title = title
//        
//        //设置标签
//        vc.tabBarItem.title = title
        
        //设置标签的时候，既要设置文字，也要同时设置图片，否则会有错误
        //统一设置标题和标签(每个控制器的导航条标签跟标签是相互对应的情况下)
        vc.title = title
        
        //让系统的等于自定义的tabbaritem
        let tabBarItem = HMTabBarItem()
        vc.tabBarItem = tabBarItem
        
        
        vc.tabBarItem.tag = index
        
        //设置图片
        vc.tabBarItem.image = UIImage(named: imageName)
        
        //标签文字位置太靠下的情况下的设置文字的位置
        vc.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, -5)
        
        //设置标签的图片的位置
//        vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
        
        //设置选中时的标签图片的样式
//        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_selected")
        
        //设置选中状态的标签图片的样式，并设置渲染方式
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_selected")?.imageWithRenderingMode(.AlwaysOriginal)
        
        //设置标签文字的选中颜色 NSForegroundColorAttributeName:前景色
        vc.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.redColor()], forState: .Selected)
        
        //统一设置标签文字颜色
        tabBar.tintColor = UIColor.redColor()
        
        //内嵌入导航控制器
        let nav = HMBasicViewController(rootViewController: vc)
        
        //添加
        addChildViewController(nav)
    
    }
    
    //MARK:实现协议方法  实现点击按钮的动画效果
    override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
        
        //便利tabbar的子视图 获取按钮
        var index = 0
        
        for v in tabBar.subviews {
            if v.isKindOfClass(NSClassFromString("UITabBarButton")!) {
                
                //在按钮里面确定是哪一个
                if index == item.tag {
                    
                    //便利按钮的子视图 获取具体点击的按钮的北京视图
                    for subView in v.subviews {
                        
                        if subView.isKindOfClass(NSClassFromString("UITabBarSwappableImageView")!) {
                            
                            //设置动画
                            subView.transform = CGAffineTransformMakeScale(0.5, 0.5)
                            
                            //弹簧动画效果
                            UIView.animateWithDuration(0.6, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: [], animations: { 
                                //恢复到初始之
                                subView.transform = CGAffineTransformIdentity
                                }, completion: { (_) in
                                    print("效果很不错嘛")
                            })
                        }
                        
                    }
                    
                }
                
                index += 1
            }
        }
        
    }
    
    
}
